package study.java.thread07;

/**
* @Name: ThreadGroupDemo
* @Description: 线程组测试类
* 线程组：
* 	把多个线程组合到一起；
* 	它可以对一批线程进行分类管理，java允许程序直接对线程组进行控制管理。
* Thread类中的方法：
* 	public final ThreadGroup getThreadGroup()	返回该线程所属的线程组。 如果该线程已经终止（停止运行），该方法则返回 null。 
* 	
* @Author: 李超	lc_jack@foxmail.com
* @CreateDate: 2017-1-9 下午5:36:20 
* @Version: V1.0
 */
public class ThreadGroupDemo {
	
	public static void main(String[] args) {
//		testDefaultThreadGroup() ;
		testCreateNewThreadGroup() ;
	}

	public static void testDefaultThreadGroup() {
		MyRunnable mr = new MyRunnable() ;
		Thread t1 = new Thread(mr, "张三") ;
		Thread t2 = new Thread(mr, "李四") ;
		//获取新创建的线程所属的线程组
		ThreadGroup tg1 = t1.getThreadGroup() ;
		ThreadGroup tg2 = t2.getThreadGroup() ;
		System.out.println(tg1.getName());
		System.out.println(tg2.getName());
		//获取当前主线程所属的线程组，测试可知：所有线程都属于同一个线程组：main线程组
		System.out.println(Thread.currentThread().getThreadGroup().getName());
	}
	
	private static void testCreateNewThreadGroup() {
		//创建一个线程组
		ThreadGroup tg = new ThreadGroup("新创建的线程组") ;
		MyRunnable mr = new MyRunnable() ;
		Thread t1 = new Thread(tg, mr, "张三") ;
		Thread t2 = new Thread(tg, mr, "李四") ;
		//打印新创建的线程所属线程组
		System.out.println(t1.getThreadGroup().getName());
		System.out.println(t2.getThreadGroup().getName());
		//线程组的作用
		//1、更改线程组的优先级：批量修改组内线程的优先级
//		tg.setMaxPriority(Thread.MAX_PRIORITY) ;
		//2、设置线程组为守护线程组：批量修改组内所有线程为守护线程
//		tg.setDaemon(true) ;
		//3、中断当前线程组中的所有线程
//		tg.interrupt() ;
	}
}
